package com.zx._01_基础._013_io;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.Arrays;


public class Demo_01_File {

    public static void main(String[] args) throws IOException {
        // 确定用户空间 D:\workspace-2021\knowledge
        System.out.println(System.getProperty("user.dir"));
    }

    // 1.访问文件名的方法
    public static void goFileName() {
        //1.访问文件名的方法
        File f = new File("document/IO/IO.txt");
        System.out.println(f.getName());//返回文件名或文件夹的名称
        System.out.println(f.getPath());//返回文件的路径
        System.out.println(f.getAbsolutePath());//返回文件的绝对路径
        File file = f.getAbsoluteFile();//返回文件的绝对路径
        System.out.println(f.getParent());//获得父目录对应的路径
        f.renameTo(new File("document/IO/IO操作.txt"));//重命名
    }

    // 2.文件检测
    public static void goFile() {
        //2.文件检测
        File f = new File("io_read.txt");
        System.out.println(f.exists());//文件是否存在
        System.out.println(f.canWrite());//是否可写
        System.out.println(f.canRead());//是否可读
        System.out.println(f.isFile());//是否是文件
        System.out.println(f.isDirectory());//是否是文件夹
        System.out.println(f.isAbsolute());//是否是绝对路径
        //该方法消除了不同的平台的差异，可以直接判断File对象是否是绝对路径；在UNIX;Linux/BSD等系统上。如果文件名的开头是/，则可能是绝对路径
        //在window上，文件开头是盘符，则是。
    }

    //  3.获取常规文件信息
    public static void goFileInfo() {
        //3.获取常规文件信息
        File f = new File("io_read.txt");
        System.out.println(f.lastModified());//文件最后修改时间
        System.out.println(f.length());//文件内容的字符长度
    }

    // 4.文件操作
    public static void goFileOperate() throws IOException {
        //4.文件操作
        File f = new File("io_read.txt");
        //当这个对象不存在的时候，创建。
        System.out.println(f.createNewFile());
        //删除这个文件
        System.out.println(f.delete());
        //生成临时文件
        File file = File.createTempFile("abc", ".tmp", new File("d://"));
        //注册一个删除钩子，在java虚拟机退出的时候，删除这个file对象
        f.deleteOnExit();
    }

    // 5.目录操作
    public static void goFileDir() {
        //5.目录操作
        File f = new File("document/IO");
        //创建一个file对象对应的目录
        f.mkdir();
        //获得所有的子文件名和路径名
        f.list();
        System.out.println(Arrays.toString(f.list()));
        //获得所有的子文件
        File[] files = f.listFiles();
        System.out.println(Arrays.toString(files));
        File[] listRoots = File.listRoots();
        //获得系统所有的更目录
        System.out.println(Arrays.toString(listRoots));
    }

    //6.文件过滤筛选
    public static void geFileFilter() {
        //6.文件过滤筛选
        File f = new File("E:\\CSDN新闻汇总\\20160223");
        String[] list = f.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                boolean b = name.endsWith(".pdf");//判断子文件的格式是pdf
                //dir是选择文件的根路径
                return b;
            }
        });
    }
}
